package com.kun.companion.core.thread;

/**
 * 优先级任务包装类
 * <p>
 * 为Runnable任务添加优先级属性，数值越大表示优先级越高（范围建议0-10）
 * 支持通过Comparable接口实现任务排序
 * </p>
 *
 * @author gzc
 * @since 2025/2/3
 **/
public class PrioritizedTask implements Runnable, Comparable<PrioritizedTask> {
    /**
     * 原始任务对象（不可为null）
     */
    private final Runnable task;

    /**
     * 任务优先级（数值越大优先级越高）
     */
    private final int priority;

    public PrioritizedTask(Runnable task) {
        this(task, Thread.NORM_PRIORITY);
    }

    /**
     * 构造函数
     *
     * @param task     实际执行的任务（不可为null）
     * @param priority 任务优先级（建议范围0-10）
     * @throws IllegalArgumentException 当task为null时抛出
     */
    public PrioritizedTask(Runnable task, int priority) {
        if (task == null) {
            throw new IllegalArgumentException("任务对象不能为null");
        }
        this.task = task;
        this.priority = priority;
    }

    @Override
    public void run() {
        task.run();
    }

    /**
     * 获取任务优先级
     */
    public int getPriority() {
        return priority;
    }

    /**
     * 比较方法实现（数值越大优先级越高）
     */
    @Override
    public int compareTo(PrioritizedTask other) {
        return Integer.compare(other.priority, this.priority);
    }
}